import { login, getUserInfo, getUserDetailById } from '@/api/user'

// 引入
import { getToken, setToken, removeToken } from '@/utils/auth'
export default {
  namespaced: true,
  state: {
    token: getToken() || '', // 这里因为是初始值为空 刷新的时候所有的代码都会重置 token也会被重置
    userinfo: {}
  },
  mutations: {
    // 获取token
    getToken(state, token) {
      state.token = token
      // 存入cookie
      setToken(token)
      // 登录 - token - 存入cookie
      // 刷新 - token初始化会执行 - getToken
    },
    // 获取用户信息
    getUserInfo(state, userInfo) {
      state.userinfo = userInfo
    },
    // 退出
    removeInfo(state) {
      // 清空token
      state.token = ''
      // 清空用户信息
      state.userinfo = ''
      // 清除本地
      removeToken()
    }
  },
  actions: {
    async getLogin(ctx, val) {
      const res = await login(val)
      ctx.commit('getToken', res)
    },
    // 问题
    /**
     * 1.后端多个接口对应其阿奴单的一个业务 组合数据
     * 2.接口之间有前后的依赖关系 await 可以保证串行的结构
     *

    */
    // 1.发请求
    async getUserinfo(ctx) {
      // 插入一个头像信息请求
      const res = await getUserInfo()
      //  2.调用mutation [合并一下两个接口的=返回对象 成为一个对象]
      const detailRes = await getUserDetailById(res.userId)
      ctx.commit('getUserInfo', { ...res, ...detailRes })
      return res.roles
    }
  }
}
// 使用veux管理数据的时候 从数据的顶底到同步到异步都放到vuex中
// 组建中只调用一件事 调用action中的方法
